Proximal Policy Optimization (PPO)
简介
Proximal Policy Optimization (PPO) 是由 OpenAI 在 2017 年提出的一类策略梯度方法,用于强化学习。PPO 在简洁性、稳定性和性能之间取得了平衡,使其成为现代 RL 应用中最广泛使用的算法之一,包括大规模语言模型的微调。
传统的策略梯度方法(如 REINFORCE 或 Vanilla Policy Gradient)存在以下问题:
- 高方差和样本效率低下
- 由于策略更新过大而导致的不稳定性
PPO 通过使用裁剪的替代目标函数来解决这些问题,该函数可以避免过大的更新,而无需计算二阶导数。
PPO 配置参数
在ROLL中,PPO 算法的配置参数如下(roll.pipeline.rlvr.rlvr_config.RLVRConfig):
# ppo related
rollout_batch_size: 512 # prompt
prompt_length: 2048
response_length: 4096
adv_estimator: "gae"
num_return_sequences_in_group: 1
ppo_epochs: 1
use_kl_loss: true
kl_loss_coef: 0.001
loss_agg_mode: "seq-mean-token-mean"
whiten_advantages: true
advantage_clip: 2.0
reward_clip: ~
dual_clip_loss: true
lambd: 0.95
gamma: 1
pg_clip: 0.2
value_clip: ~
kl_penalty: "kl"
target_kl: ~
init_kl_coef: 0.2
kl_horizon: 10000
add_token_level_kl: false
# normalize
norm_mean_type: ~
norm_std_type: ~
PPO相关参数说明
| 参数 | 默认值 | 可选项 | 说明 |
|---|---|---|---|
rollout_batch_size | 512 | 正整数 | 每批次提示的数量 |
prompt_length | 2048 | 正整数 | 提示的最大长度 |
response_length | 4096 | 正整数 | 响应的最大长度 |
adv_estimator | "gae" | "gae", "reinforce", "grpo" | 优势估计器类型 |
num_return_sequences_in_group | 1 | 正整数 | 每个提示生成的响应数量 |
ppo_epochs | 1 | 正整数 | 每个批次样本的优化轮数 |
use_kl_loss | true | true, false | 是否使用 KL 散度损失 |
kl_loss_coef | 0.001 | 浮点数 | KL 散度损失系数 |
loss_agg_mode | "seq-mean-token-sum" | "token-mean", "seq-mean-token-sum", "seq-mean-token-mean", "seq-mean-token-sum-norm" | 损失聚合模式 |
whiten_advantages | true | true, false | 是否对优势值进行白化处理 |
advantage_clip | 2.0 | 浮点数, ~ (表示不设置) | 优势值裁剪范围 |
reward_clip | ~ | 浮点数, ~ (表示不设置) | 奖励值裁剪范围 |
dual_clip_loss | true | true, false | 是否使用双重裁剪损失 |
lambd | 0.95 | [0, 1] 区间内的浮点数 | GAE 估计器中的 lambda 参数,用于在偏差和方差之间进行权衡 |
gamma | 1 | [0, 1] 区间内的浮点数 |